{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 作业一"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 循环的方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "三天的采购金额是: [37.2, 37.6, 36.8]\n"
     ]
    }
   ],
   "source": [
    "price = [[1.2, 1.5, 1.8], [1.3, 1.4, 1.9], [1.1, 1.6, 1.7]]\n",
    "amount = [5, 10, 9]\n",
    "total_amount = []\n",
    "for i in range(3):\n",
    "    s = 0\n",
    "    for j in range(3):\n",
    "        s += price[i][j] * amount[j]\n",
    "    total_amount.append(round(s, 1))\n",
    "print('三天的采购金额是: %s'%total_amount)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 矩阵点乘"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "三天的采购金额是[37.2 37.6 36.8]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "X = np.array([[1.2, 1.5, 1.8], [1.3, 1.4, 1.9], [1.1, 1.6, 1.7]])\n",
    "y = np.array([5, 10, 9]).T\n",
    "\n",
    "total_amount = np.dot(X, y)\n",
    "print('三天的采购金额是{}'.format(total_amount))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 比较性能"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5.29 µs ± 388 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "%%timeit  \n",
    "# 循环的方法\n",
    "total_amount = []\n",
    "for i in range(3):\n",
    "    s = 0\n",
    "    for j in range(3):\n",
    "        s += price[i][j] * amount[j]\n",
    "    total_amount.append(round(s, 1))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.37 µs ± 370 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "%%timeit\n",
    "# 矩阵点乘\n",
    "total_amount = np.dot(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "## 小结： 矩阵点乘比for循环更高效"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 作业二"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([6, 9, 6, 1, 1, 2, 8, 7, 3, 5, 6, 3, 5, 3, 5, 8, 8, 2, 8, 1, 7, 8,\n",
       "       7, 2, 1, 2, 9, 9, 4, 9])"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.random.seed(1)\n",
    "X = np.random.randint(1, 10, size = 30)\n",
    "X"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 将X处理为一个三列的矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[6, 9, 6],\n",
       "       [1, 1, 2],\n",
       "       [8, 7, 3],\n",
       "       [5, 6, 3],\n",
       "       [5, 3, 5],\n",
       "       [8, 8, 2],\n",
       "       [8, 1, 7],\n",
       "       [8, 7, 2],\n",
       "       [1, 2, 9],\n",
       "       [9, 4, 9]])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = X.reshape((-1, 3))\n",
    "X"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 将第三列中，小于等于3的修改为0、大于3且小于等于6的修改为1、大于6的修改为2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([6, 2, 3, 3, 5, 2, 7, 2, 9, 9])"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c3 = X[:, 2]\n",
    "c3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 0, 0, 0, 1, 0, 2, 0, 2, 2])"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c3[c3 <= 3] = 0\n",
    "c3[(c3>3) & (c3<=6)] = 1\n",
    "c3[c3 > 6] = 2\n",
    "c3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[6, 9, 1],\n",
       "       [1, 1, 0],\n",
       "       [8, 7, 0],\n",
       "       [5, 6, 0],\n",
       "       [5, 3, 1],\n",
       "       [8, 8, 0],\n",
       "       [8, 1, 2],\n",
       "       [8, 7, 0],\n",
       "       [1, 2, 2],\n",
       "       [9, 4, 2]])"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X[:, 2] = c3\n",
    "X"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分理处样本的特征和分类标记"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[6, 9],\n",
       "       [1, 1],\n",
       "       [8, 7],\n",
       "       [5, 6],\n",
       "       [5, 3],\n",
       "       [8, 8],\n",
       "       [8, 1],\n",
       "       [8, 7],\n",
       "       [1, 2],\n",
       "       [9, 4]])"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train = X[:, 0:2]\n",
    "X_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 0, 0, 0, 1, 0, 2, 0, 2, 2])"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train = X[:, 2]\n",
    "y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 1],\n",
       "       [8, 7],\n",
       "       [5, 6],\n",
       "       [8, 8],\n",
       "       [8, 7]])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 分类为0的样本\n",
    "X_train[y_train == 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[6, 9],\n",
       "       [5, 3]])"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 分类为1的样本\n",
    "X_train[y_train == 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[8, 1],\n",
       "       [1, 2],\n",
       "       [9, 4]])"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 分类为2的样本\n",
    "X_train[y_train == 2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 作业三"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 将数据导入pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>api</th>\n",
       "      <th>count</th>\n",
       "      <th>res_time_sum</th>\n",
       "      <th>res_time_min</th>\n",
       "      <th>res_time_max</th>\n",
       "      <th>res_time_avg</th>\n",
       "      <th>interval</th>\n",
       "      <th>created_at</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>162542</td>\n",
       "      <td>/front-api/bill/create</td>\n",
       "      <td>8</td>\n",
       "      <td>1057.31</td>\n",
       "      <td>88.75</td>\n",
       "      <td>177.72</td>\n",
       "      <td>132.0</td>\n",
       "      <td>60</td>\n",
       "      <td>2018-11-01 00:00:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>162644</td>\n",
       "      <td>/front-api/bill/create</td>\n",
       "      <td>5</td>\n",
       "      <td>749.12</td>\n",
       "      <td>103.79</td>\n",
       "      <td>240.38</td>\n",
       "      <td>149.0</td>\n",
       "      <td>60</td>\n",
       "      <td>2018-11-01 00:01:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>162742</td>\n",
       "      <td>/front-api/bill/create</td>\n",
       "      <td>5</td>\n",
       "      <td>845.84</td>\n",
       "      <td>136.31</td>\n",
       "      <td>225.73</td>\n",
       "      <td>169.0</td>\n",
       "      <td>60</td>\n",
       "      <td>2018-11-01 00:02:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>162808</td>\n",
       "      <td>/front-api/bill/create</td>\n",
       "      <td>9</td>\n",
       "      <td>1305.52</td>\n",
       "      <td>90.12</td>\n",
       "      <td>196.61</td>\n",
       "      <td>145.0</td>\n",
       "      <td>60</td>\n",
       "      <td>2018-11-01 00:03:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>162943</td>\n",
       "      <td>/front-api/bill/create</td>\n",
       "      <td>3</td>\n",
       "      <td>568.89</td>\n",
       "      <td>138.45</td>\n",
       "      <td>232.02</td>\n",
       "      <td>189.0</td>\n",
       "      <td>60</td>\n",
       "      <td>2018-11-01 00:04:07</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       id                     api  count  res_time_sum  res_time_min  \\\n",
       "0  162542  /front-api/bill/create      8       1057.31         88.75   \n",
       "1  162644  /front-api/bill/create      5        749.12        103.79   \n",
       "2  162742  /front-api/bill/create      5        845.84        136.31   \n",
       "3  162808  /front-api/bill/create      9       1305.52         90.12   \n",
       "4  162943  /front-api/bill/create      3        568.89        138.45   \n",
       "\n",
       "   res_time_max  res_time_avg  interval           created_at  \n",
       "0        177.72         132.0        60  2018-11-01 00:00:07  \n",
       "1        240.38         149.0        60  2018-11-01 00:01:07  \n",
       "2        225.73         169.0        60  2018-11-01 00:02:07  \n",
       "3        196.61         145.0        60  2018-11-01 00:03:07  \n",
       "4        232.02         189.0        60  2018-11-01 00:04:07  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "df = pd.read_table(\"./log.txt\", header = None)\n",
    "df.head(5)\n",
    "df.columns = ['id', 'api', 'count', 'res_time_sum', 'res_time_min', 'res_time_max', 'res_time_avg', 'interval', 'created_at']\n",
    "df.head(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 检测是否有重复值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(179496, 9)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 179496 entries, 0 to 179495\n",
      "Data columns (total 9 columns):\n",
      " #   Column        Non-Null Count   Dtype  \n",
      "---  ------        --------------   -----  \n",
      " 0   id            179496 non-null  int64  \n",
      " 1   api           179496 non-null  object \n",
      " 2   count         179496 non-null  int64  \n",
      " 3   res_time_sum  179496 non-null  float64\n",
      " 4   res_time_min  179496 non-null  float64\n",
      " 5   res_time_max  179496 non-null  float64\n",
      " 6   res_time_avg  179496 non-null  float64\n",
      " 7   interval      179496 non-null  int64  \n",
      " 8   created_at    179496 non-null  object \n",
      "dtypes: float64(4), int64(3), object(2)\n",
      "memory usage: 12.3+ MB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    179496.0\n",
       "mean         60.0\n",
       "std           0.0\n",
       "min          60.0\n",
       "25%          60.0\n",
       "50%          60.0\n",
       "75%          60.0\n",
       "max          60.0\n",
       "Name: interval, dtype: float64"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['interval'].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>api</th>\n",
       "      <th>count</th>\n",
       "      <th>res_time_sum</th>\n",
       "      <th>res_time_min</th>\n",
       "      <th>res_time_max</th>\n",
       "      <th>res_time_avg</th>\n",
       "      <th>created_at</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>162542</td>\n",
       "      <td>/front-api/bill/create</td>\n",
       "      <td>8</td>\n",
       "      <td>1057.31</td>\n",
       "      <td>88.75</td>\n",
       "      <td>177.72</td>\n",
       "      <td>132.0</td>\n",
       "      <td>2018-11-01 00:00:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>162644</td>\n",
       "      <td>/front-api/bill/create</td>\n",
       "      <td>5</td>\n",
       "      <td>749.12</td>\n",
       "      <td>103.79</td>\n",
       "      <td>240.38</td>\n",
       "      <td>149.0</td>\n",
       "      <td>2018-11-01 00:01:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>162742</td>\n",
       "      <td>/front-api/bill/create</td>\n",
       "      <td>5</td>\n",
       "      <td>845.84</td>\n",
       "      <td>136.31</td>\n",
       "      <td>225.73</td>\n",
       "      <td>169.0</td>\n",
       "      <td>2018-11-01 00:02:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>162808</td>\n",
       "      <td>/front-api/bill/create</td>\n",
       "      <td>9</td>\n",
       "      <td>1305.52</td>\n",
       "      <td>90.12</td>\n",
       "      <td>196.61</td>\n",
       "      <td>145.0</td>\n",
       "      <td>2018-11-01 00:03:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>162943</td>\n",
       "      <td>/front-api/bill/create</td>\n",
       "      <td>3</td>\n",
       "      <td>568.89</td>\n",
       "      <td>138.45</td>\n",
       "      <td>232.02</td>\n",
       "      <td>189.0</td>\n",
       "      <td>2018-11-01 00:04:07</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       id                     api  count  res_time_sum  res_time_min  \\\n",
       "0  162542  /front-api/bill/create      8       1057.31         88.75   \n",
       "1  162644  /front-api/bill/create      5        749.12        103.79   \n",
       "2  162742  /front-api/bill/create      5        845.84        136.31   \n",
       "3  162808  /front-api/bill/create      9       1305.52         90.12   \n",
       "4  162943  /front-api/bill/create      3        568.89        138.45   \n",
       "\n",
       "   res_time_max  res_time_avg           created_at  \n",
       "0        177.72         132.0  2018-11-01 00:00:07  \n",
       "1        240.38         149.0  2018-11-01 00:01:07  \n",
       "2        225.73         169.0  2018-11-01 00:02:07  \n",
       "3        196.61         145.0  2018-11-01 00:03:07  \n",
       "4        232.02         189.0  2018-11-01 00:04:07  "
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# interval 这一列都是重复的， 删除\n",
    "df = df.drop(['interval'], axis = 1)\n",
    "df.head(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 检测是否有异常值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count                     179496\n",
       "unique                         1\n",
       "top       /front-api/bill/create\n",
       "freq                      179496\n",
       "Name: api, dtype: object"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['api'].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>count</th>\n",
       "      <th>res_time_sum</th>\n",
       "      <th>res_time_min</th>\n",
       "      <th>res_time_max</th>\n",
       "      <th>res_time_avg</th>\n",
       "      <th>created_at</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>162542</td>\n",
       "      <td>8</td>\n",
       "      <td>1057.31</td>\n",
       "      <td>88.75</td>\n",
       "      <td>177.72</td>\n",
       "      <td>132.0</td>\n",
       "      <td>2018-11-01 00:00:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>162644</td>\n",
       "      <td>5</td>\n",
       "      <td>749.12</td>\n",
       "      <td>103.79</td>\n",
       "      <td>240.38</td>\n",
       "      <td>149.0</td>\n",
       "      <td>2018-11-01 00:01:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>162742</td>\n",
       "      <td>5</td>\n",
       "      <td>845.84</td>\n",
       "      <td>136.31</td>\n",
       "      <td>225.73</td>\n",
       "      <td>169.0</td>\n",
       "      <td>2018-11-01 00:02:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>162808</td>\n",
       "      <td>9</td>\n",
       "      <td>1305.52</td>\n",
       "      <td>90.12</td>\n",
       "      <td>196.61</td>\n",
       "      <td>145.0</td>\n",
       "      <td>2018-11-01 00:03:07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>162943</td>\n",
       "      <td>3</td>\n",
       "      <td>568.89</td>\n",
       "      <td>138.45</td>\n",
       "      <td>232.02</td>\n",
       "      <td>189.0</td>\n",
       "      <td>2018-11-01 00:04:07</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       id  count  res_time_sum  res_time_min  res_time_max  res_time_avg  \\\n",
       "0  162542      8       1057.31         88.75        177.72         132.0   \n",
       "1  162644      5        749.12        103.79        240.38         149.0   \n",
       "2  162742      5        845.84        136.31        225.73         169.0   \n",
       "3  162808      9       1305.52         90.12        196.61         145.0   \n",
       "4  162943      3        568.89        138.45        232.02         189.0   \n",
       "\n",
       "            created_at  \n",
       "0  2018-11-01 00:00:07  \n",
       "1  2018-11-01 00:01:07  \n",
       "2  2018-11-01 00:02:07  \n",
       "3  2018-11-01 00:03:07  \n",
       "4  2018-11-01 00:04:07  "
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# api 这一列是字符串，都是一样的api, 删除\n",
    "df = df.drop(['api'], axis = 1)\n",
    "df.head(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 分析api 和 interval 是否有用，为什么丢弃"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "# api 和 interval 数据列的每一行都是一样的内容， 没有分析价值，丢弃后文件变得更小，节约内存"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. 使用created_at 这一列作为时间索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>count</th>\n",
       "      <th>res_time_sum</th>\n",
       "      <th>res_time_min</th>\n",
       "      <th>res_time_max</th>\n",
       "      <th>res_time_avg</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>created_at</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-11-01 00:00:07</th>\n",
       "      <td>162542</td>\n",
       "      <td>8</td>\n",
       "      <td>1057.31</td>\n",
       "      <td>88.75</td>\n",
       "      <td>177.72</td>\n",
       "      <td>132.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-01 00:01:07</th>\n",
       "      <td>162644</td>\n",
       "      <td>5</td>\n",
       "      <td>749.12</td>\n",
       "      <td>103.79</td>\n",
       "      <td>240.38</td>\n",
       "      <td>149.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-01 00:02:07</th>\n",
       "      <td>162742</td>\n",
       "      <td>5</td>\n",
       "      <td>845.84</td>\n",
       "      <td>136.31</td>\n",
       "      <td>225.73</td>\n",
       "      <td>169.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-01 00:03:07</th>\n",
       "      <td>162808</td>\n",
       "      <td>9</td>\n",
       "      <td>1305.52</td>\n",
       "      <td>90.12</td>\n",
       "      <td>196.61</td>\n",
       "      <td>145.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-01 00:04:07</th>\n",
       "      <td>162943</td>\n",
       "      <td>3</td>\n",
       "      <td>568.89</td>\n",
       "      <td>138.45</td>\n",
       "      <td>232.02</td>\n",
       "      <td>189.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                         id  count  res_time_sum  res_time_min  res_time_max  \\\n",
       "created_at                                                                     \n",
       "2018-11-01 00:00:07  162542      8       1057.31         88.75        177.72   \n",
       "2018-11-01 00:01:07  162644      5        749.12        103.79        240.38   \n",
       "2018-11-01 00:02:07  162742      5        845.84        136.31        225.73   \n",
       "2018-11-01 00:03:07  162808      9       1305.52         90.12        196.61   \n",
       "2018-11-01 00:04:07  162943      3        568.89        138.45        232.02   \n",
       "\n",
       "                     res_time_avg  \n",
       "created_at                         \n",
       "2018-11-01 00:00:07         132.0  \n",
       "2018-11-01 00:01:07         149.0  \n",
       "2018-11-01 00:02:07         169.0  \n",
       "2018-11-01 00:03:07         145.0  \n",
       "2018-11-01 00:04:07         189.0  "
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df.set_index('created_at')\n",
    "df.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['2018-11-01 00:00:07', '2018-11-01 00:01:07', '2018-11-01 00:02:07',\n",
       "       '2018-11-01 00:03:07', '2018-11-01 00:04:07', '2018-11-01 00:05:07',\n",
       "       '2018-11-01 00:06:07', '2018-11-01 00:07:07', '2018-11-01 00:08:07',\n",
       "       '2018-11-01 00:09:07',\n",
       "       ...\n",
       "       '2019-05-30 23:01:21', '2019-05-30 23:02:21', '2019-05-30 23:03:21',\n",
       "       '2019-05-30 23:04:21', '2019-05-30 23:05:21', '2019-05-30 23:06:21',\n",
       "       '2019-05-30 23:07:21', '2019-05-30 23:08:21', '2019-05-30 23:09:21',\n",
       "       '2019-05-30 23:10:21'],\n",
       "      dtype='object', name='created_at', length=179496)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2018-11-01 00:00:07', '2018-11-01 00:01:07',\n",
       "               '2018-11-01 00:02:07', '2018-11-01 00:03:07',\n",
       "               '2018-11-01 00:04:07', '2018-11-01 00:05:07',\n",
       "               '2018-11-01 00:06:07', '2018-11-01 00:07:07',\n",
       "               '2018-11-01 00:08:07', '2018-11-01 00:09:07',\n",
       "               ...\n",
       "               '2019-05-30 23:01:21', '2019-05-30 23:02:21',\n",
       "               '2019-05-30 23:03:21', '2019-05-30 23:04:21',\n",
       "               '2019-05-30 23:05:21', '2019-05-30 23:06:21',\n",
       "               '2019-05-30 23:07:21', '2019-05-30 23:08:21',\n",
       "               '2019-05-30 23:09:21', '2019-05-30 23:10:21'],\n",
       "              dtype='datetime64[ns]', name='created_at', length=179496, freq=None)"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# index 数据类型是 object ，转换为datetime\n",
    "df.index = pd.to_datetime(df.index)\n",
    "df.index"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. 分析api调用次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "created_at\n",
       "2018-11-04 00:00:13    6\n",
       "2018-11-04 00:01:13    6\n",
       "2018-11-04 00:02:13    6\n",
       "2018-11-04 00:03:13    5\n",
       "2018-11-04 00:04:13    7\n",
       "                      ..\n",
       "2018-11-04 23:55:16    5\n",
       "2018-11-04 23:56:16    2\n",
       "2018-11-04 23:57:16    3\n",
       "2018-11-04 23:58:16    3\n",
       "2018-11-04 23:59:16    4\n",
       "Name: count, Length: 875, dtype: int64"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 随意选一天\n",
    "df['2018-11-04']['count']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 选取为DataFrame，画图\n",
    "import matplotlib.pyplot as plt\n",
    "df['2018-11-04'][['count']].plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 如图，凌晨3点到上午10点，访问比较少，下午3-4点有一个高峰，晚上8点到9点，又一个高峰"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. 分析一天中api响应时间"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>count</th>\n",
       "      <th>res_time_sum</th>\n",
       "      <th>res_time_min</th>\n",
       "      <th>res_time_max</th>\n",
       "      <th>res_time_avg</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>created_at</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-11-04 00:00:00</th>\n",
       "      <td>404601.267857</td>\n",
       "      <td>3.625000</td>\n",
       "      <td>557.069286</td>\n",
       "      <td>119.083393</td>\n",
       "      <td>198.829464</td>\n",
       "      <td>155.446429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 01:00:00</th>\n",
       "      <td>408867.744681</td>\n",
       "      <td>2.042553</td>\n",
       "      <td>331.949574</td>\n",
       "      <td>147.588936</td>\n",
       "      <td>198.305745</td>\n",
       "      <td>169.702128</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 02:00:00</th>\n",
       "      <td>411282.125000</td>\n",
       "      <td>1.125000</td>\n",
       "      <td>152.036250</td>\n",
       "      <td>130.978750</td>\n",
       "      <td>134.722500</td>\n",
       "      <td>132.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 03:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 04:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 05:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 06:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 07:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 08:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 09:00:00</th>\n",
       "      <td>414257.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>239.620000</td>\n",
       "      <td>239.620000</td>\n",
       "      <td>239.620000</td>\n",
       "      <td>239.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 10:00:00</th>\n",
       "      <td>415865.133333</td>\n",
       "      <td>1.066667</td>\n",
       "      <td>172.637333</td>\n",
       "      <td>161.872667</td>\n",
       "      <td>161.935333</td>\n",
       "      <td>161.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 11:00:00</th>\n",
       "      <td>418317.358974</td>\n",
       "      <td>1.692308</td>\n",
       "      <td>273.611282</td>\n",
       "      <td>155.463846</td>\n",
       "      <td>174.566923</td>\n",
       "      <td>164.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 12:00:00</th>\n",
       "      <td>422070.384615</td>\n",
       "      <td>2.942308</td>\n",
       "      <td>442.274423</td>\n",
       "      <td>126.814038</td>\n",
       "      <td>183.180962</td>\n",
       "      <td>153.230769</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 13:00:00</th>\n",
       "      <td>426288.200000</td>\n",
       "      <td>6.383333</td>\n",
       "      <td>978.426667</td>\n",
       "      <td>105.353667</td>\n",
       "      <td>212.511500</td>\n",
       "      <td>151.883333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 14:00:00</th>\n",
       "      <td>430942.083333</td>\n",
       "      <td>8.366667</td>\n",
       "      <td>1248.954667</td>\n",
       "      <td>95.490500</td>\n",
       "      <td>211.805333</td>\n",
       "      <td>148.166667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 15:00:00</th>\n",
       "      <td>435845.133333</td>\n",
       "      <td>9.650000</td>\n",
       "      <td>1504.672167</td>\n",
       "      <td>98.309167</td>\n",
       "      <td>245.183667</td>\n",
       "      <td>155.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 16:00:00</th>\n",
       "      <td>440915.271186</td>\n",
       "      <td>9.101695</td>\n",
       "      <td>1388.112881</td>\n",
       "      <td>95.218644</td>\n",
       "      <td>223.684068</td>\n",
       "      <td>149.627119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 17:00:00</th>\n",
       "      <td>446051.733333</td>\n",
       "      <td>7.416667</td>\n",
       "      <td>1180.448167</td>\n",
       "      <td>100.778333</td>\n",
       "      <td>239.429500</td>\n",
       "      <td>159.050000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 18:00:00</th>\n",
       "      <td>451018.948276</td>\n",
       "      <td>7.500000</td>\n",
       "      <td>1130.203448</td>\n",
       "      <td>93.276207</td>\n",
       "      <td>235.405862</td>\n",
       "      <td>149.068966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 19:00:00</th>\n",
       "      <td>456380.900000</td>\n",
       "      <td>8.983333</td>\n",
       "      <td>1443.413833</td>\n",
       "      <td>92.826500</td>\n",
       "      <td>288.258667</td>\n",
       "      <td>161.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 20:00:00</th>\n",
       "      <td>461653.083333</td>\n",
       "      <td>11.233333</td>\n",
       "      <td>1794.853667</td>\n",
       "      <td>95.599500</td>\n",
       "      <td>251.815833</td>\n",
       "      <td>160.066667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 21:00:00</th>\n",
       "      <td>466922.116667</td>\n",
       "      <td>10.600000</td>\n",
       "      <td>1710.874833</td>\n",
       "      <td>97.070000</td>\n",
       "      <td>255.432167</td>\n",
       "      <td>161.033333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 22:00:00</th>\n",
       "      <td>472267.000000</td>\n",
       "      <td>9.016667</td>\n",
       "      <td>1429.702667</td>\n",
       "      <td>97.405500</td>\n",
       "      <td>237.854833</td>\n",
       "      <td>156.616667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-04 23:00:00</th>\n",
       "      <td>477502.266667</td>\n",
       "      <td>5.533333</td>\n",
       "      <td>868.531000</td>\n",
       "      <td>104.358167</td>\n",
       "      <td>220.237833</td>\n",
       "      <td>155.450000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                id      count  res_time_sum  res_time_min  \\\n",
       "created_at                                                                  \n",
       "2018-11-04 00:00:00  404601.267857   3.625000    557.069286    119.083393   \n",
       "2018-11-04 01:00:00  408867.744681   2.042553    331.949574    147.588936   \n",
       "2018-11-04 02:00:00  411282.125000   1.125000    152.036250    130.978750   \n",
       "2018-11-04 03:00:00            NaN        NaN           NaN           NaN   \n",
       "2018-11-04 04:00:00            NaN        NaN           NaN           NaN   \n",
       "2018-11-04 05:00:00            NaN        NaN           NaN           NaN   \n",
       "2018-11-04 06:00:00            NaN        NaN           NaN           NaN   \n",
       "2018-11-04 07:00:00            NaN        NaN           NaN           NaN   \n",
       "2018-11-04 08:00:00            NaN        NaN           NaN           NaN   \n",
       "2018-11-04 09:00:00  414257.000000   1.000000    239.620000    239.620000   \n",
       "2018-11-04 10:00:00  415865.133333   1.066667    172.637333    161.872667   \n",
       "2018-11-04 11:00:00  418317.358974   1.692308    273.611282    155.463846   \n",
       "2018-11-04 12:00:00  422070.384615   2.942308    442.274423    126.814038   \n",
       "2018-11-04 13:00:00  426288.200000   6.383333    978.426667    105.353667   \n",
       "2018-11-04 14:00:00  430942.083333   8.366667   1248.954667     95.490500   \n",
       "2018-11-04 15:00:00  435845.133333   9.650000   1504.672167     98.309167   \n",
       "2018-11-04 16:00:00  440915.271186   9.101695   1388.112881     95.218644   \n",
       "2018-11-04 17:00:00  446051.733333   7.416667   1180.448167    100.778333   \n",
       "2018-11-04 18:00:00  451018.948276   7.500000   1130.203448     93.276207   \n",
       "2018-11-04 19:00:00  456380.900000   8.983333   1443.413833     92.826500   \n",
       "2018-11-04 20:00:00  461653.083333  11.233333   1794.853667     95.599500   \n",
       "2018-11-04 21:00:00  466922.116667  10.600000   1710.874833     97.070000   \n",
       "2018-11-04 22:00:00  472267.000000   9.016667   1429.702667     97.405500   \n",
       "2018-11-04 23:00:00  477502.266667   5.533333    868.531000    104.358167   \n",
       "\n",
       "                     res_time_max  res_time_avg  \n",
       "created_at                                       \n",
       "2018-11-04 00:00:00    198.829464    155.446429  \n",
       "2018-11-04 01:00:00    198.305745    169.702128  \n",
       "2018-11-04 02:00:00    134.722500    132.500000  \n",
       "2018-11-04 03:00:00           NaN           NaN  \n",
       "2018-11-04 04:00:00           NaN           NaN  \n",
       "2018-11-04 05:00:00           NaN           NaN  \n",
       "2018-11-04 06:00:00           NaN           NaN  \n",
       "2018-11-04 07:00:00           NaN           NaN  \n",
       "2018-11-04 08:00:00           NaN           NaN  \n",
       "2018-11-04 09:00:00    239.620000    239.000000  \n",
       "2018-11-04 10:00:00    161.935333    161.400000  \n",
       "2018-11-04 11:00:00    174.566923    164.000000  \n",
       "2018-11-04 12:00:00    183.180962    153.230769  \n",
       "2018-11-04 13:00:00    212.511500    151.883333  \n",
       "2018-11-04 14:00:00    211.805333    148.166667  \n",
       "2018-11-04 15:00:00    245.183667    155.100000  \n",
       "2018-11-04 16:00:00    223.684068    149.627119  \n",
       "2018-11-04 17:00:00    239.429500    159.050000  \n",
       "2018-11-04 18:00:00    235.405862    149.068966  \n",
       "2018-11-04 19:00:00    288.258667    161.250000  \n",
       "2018-11-04 20:00:00    251.815833    160.066667  \n",
       "2018-11-04 21:00:00    255.432167    161.033333  \n",
       "2018-11-04 22:00:00    237.854833    156.616667  \n",
       "2018-11-04 23:00:00    220.237833    155.450000  "
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1 = df['2018-11-04'].resample('H').mean()\n",
    "df1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df1[['res_time_min','res_time_max','res_time_avg']].plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 如上图所示， 在业务高峰阶段， 最大相应时间有所上升"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8. 分析连续几天的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df['2019-2-1' : '2019-2-10'][['count']].plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 如上图所示，每天的业务高峰时段都比较相似"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 9. 分析周末访问量是否有增加"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>count</th>\n",
       "      <th>res_time_sum</th>\n",
       "      <th>res_time_min</th>\n",
       "      <th>res_time_max</th>\n",
       "      <th>res_time_avg</th>\n",
       "      <th>weekday</th>\n",
       "      <th>weekend</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>created_at</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-11-01 00:00:07</th>\n",
       "      <td>162542</td>\n",
       "      <td>8</td>\n",
       "      <td>1057.31</td>\n",
       "      <td>88.75</td>\n",
       "      <td>177.72</td>\n",
       "      <td>132.0</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-01 00:01:07</th>\n",
       "      <td>162644</td>\n",
       "      <td>5</td>\n",
       "      <td>749.12</td>\n",
       "      <td>103.79</td>\n",
       "      <td>240.38</td>\n",
       "      <td>149.0</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-11-01 00:02:07</th>\n",
       "      <td>162742</td>\n",
       "      <td>5</td>\n",
       "      <td>845.84</td>\n",
       "      <td>136.31</td>\n",
       "      <td>225.73</td>\n",
       "      <td>169.0</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                         id  count  res_time_sum  res_time_min  res_time_max  \\\n",
       "created_at                                                                     \n",
       "2018-11-01 00:00:07  162542      8       1057.31         88.75        177.72   \n",
       "2018-11-01 00:01:07  162644      5        749.12        103.79        240.38   \n",
       "2018-11-01 00:02:07  162742      5        845.84        136.31        225.73   \n",
       "\n",
       "                     res_time_avg  weekday  weekend  \n",
       "created_at                                           \n",
       "2018-11-01 00:00:07         132.0        3    False  \n",
       "2018-11-01 00:01:07         149.0        3    False  \n",
       "2018-11-01 00:02:07         169.0        3    False  "
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['weekday'] = df.index.weekday\n",
    "df['weekend'] = df['weekday'].isin((5, 6))\n",
    "df.head(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "weekend\n",
       "False    7.016846\n",
       "True     7.574989\n",
       "Name: count, dtype: float64"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('weekend')['count'].mean()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 从数据上看，周末平均访问量大于工作日"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.groupby(['weekend', df.index.hour])['count'].mean().unstack(level = 0).plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 如上图，周末的下午和晚上，比非周末访问量多一些"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
